// // 设计一个算法判断输入的表达式中括号是否配对（假设只含有左、右圆括号）
// #include <stdio.h>
// #include <stdlib.h>
// #include <string.h>
// #include <stdbool.h>
//
// #define MAX_SIZE 100
//
// typedef struct {
//     char data[MAX_SIZE];
//     int top;
// } Stack;
//
// void initStack(Stack* s) {
//     s->top = -1;
// }
//
// bool isStackEmpty(Stack* s) {
//     return s->top == -1;
// }
//
// bool isStackFull(Stack* s) {
//     return s->top == MAX_SIZE - 1;
// }
//
// bool push(Stack* s, char value) {
//     if (isStackFull(s)) {
//         printf("Stack is full!\n");
//         return false;
//     }
//     s->data[++s->top] = value;
//     return true;
// }
//
// bool pop(Stack* s, char* value) {
//     if (isStackEmpty(s)) {
//         printf("Stack is empty!\n");
//         return false;
//     }
//     *value = s->data[s->top--];
//     return true;
// }
//
// bool isBalanced(const char* expression) {
//     Stack s;
//     initStack(&s);
//
//     for (int i = 0; expression[i] != '\0'; i++) {
//         if (expression[i] == '(') {
//             push(&s, expression[i]);
//         } else if (expression[i] == ')') {
//             char topChar;
//             if (!pop(&s, &topChar)) {
//                 return false; // 右括号没有匹配的左括号
//             }
//         }
//     }
//
//     return isStackEmpty(&s); // 如果栈为空，说明所有左括号都找到了匹配的右括号
// }
//
// // 【课后变式习题】
// // 假设表达式中允许包含 3 种括号：圆括号、方括号和大括号。
// // 编写一个算法判断表达式中的括号是否正确匹配。
// bool isBaned(const char* expression) {
//     Stack s;
//     initStack(&s);
//     for (int i = 0; expression[i] != '\0'; i++) {
//         if((expression[i]=='(') || (expression[i]=='[')||(expression[i]=='{')){
//             push(&s,expression[i]);
//         }else if(expression[i]==')'||expression[i]==']'||expression[i]=='}') {
//             char a;
//             if(!pop(&s,&a)) {
//                 return false;
//             }
//             if((expression[i]==')'&&a!='(') || (expression[i]==']'&&a!='[') || (expression[i]=='}'&&a!='{')) {
//                 return false;
//             }
//         }
//     }
//     return isStackEmpty(&s);
// }
//
//
// int main() {
//     char expression1[] = "(())";
//     char expression2[] = "(()";
//     char expression3[] = "())";
//     char expression4[] = "()()";
//
//     printf("Expression '%s' is balanced: %s\n", expression1, isBalanced(expression1) ? "true" : "false");
//     printf("Expression '%s' is balanced: %s\n", expression2, isBalanced(expression2) ? "true" : "false");
//     printf("Expression '%s' is balanced: %s\n", expression3, isBalanced(expression3) ? "true" : "false");
//     printf("Expression '%s' is balanced: %s\n", expression4, isBalanced(expression4) ? "true" : "false");
//
//     return 0;
// }
// // 【算法思想】
// // 该算法在表达式括号匹配时返回真，否则返回假。设置一个链栈 st，扫描表达式exp，
// // 遇到左括号时进栈；遇到右括号时，若栈顶为左括号，则出栈，
// // 否则返回假。当表达式扫描完毕且栈为空时返回真；否则返回假。